package com.atguigu.gmall.produck.client;

import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.produck.client.Degrade.ProductDegradeFeignClientImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @Description: TODO
 * @Author: Mr.Cao
 * @DateTime: 2021/10/11 18:58
 * BMW F750GS
 **/
@FeignClient(value ="service-product", fallback = ProductDegradeFeignClientImpl.class) //fallback：回调，远程调用失败，回调该类中的发给发
@Component
public interface ProductFeignClient {


    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
     SkuInfo getSkuInfo(@PathVariable long skuId);
    /**
     * 一二三级分类 查询id 和名称
     * */
    @GetMapping("/api/product/inner/getCategory123/{category3Id}")
     BaseCategoryView getCategory123(@PathVariable long category3Id);

    /**
     * 单独查询价格, 查询实时价格, 直接查询数据库中的价格, 不查询缓存中的价格
     * */
    @GetMapping("/api/product/inner/getPrice/{skuId}")
     BigDecimal getPrice(@PathVariable long skuId);
    /**
     *根据spuId，skuId 查询销售属性集合
     * 查询销售属性及选中的属性
     */
    @GetMapping("/api/product/inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
     List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable("skuId") Long skuId, @PathVariable("spuId") Long spuId);
    /**
     * 根据spuId 查询map 集合属性
     */
    @GetMapping("/api/product/inner/getSkuValueIdsMap/{spuId}")
     Map getSkuValueIdsMap(@PathVariable("spuId") Long spuId);

    /**
     * 查询所有分类视图 集合
     */

    @GetMapping("/api/product/inner/getBaseCategoryViewList")
     List<BaseCategoryView> getBaseCategoryViewList();

    /**
     * 根据品牌id 获取品牌信息
     */
    @GetMapping("/api/product/inner/getBaseTrademark/{tmId}")
    BaseTrademark getBaseTrademark(@PathVariable Long tmId);

    /**
     * 查询某某款 sku商品的平台属性集合
     * */
    @GetMapping("/api/product//inner/getSkuAttrValueAndAttrAndAttrValue/{skuId}")
     List<SkuAttrValue> getSkuAttrValueAndAttrAndAttrValue(@PathVariable long skuId);
}


